// 引入封装的API请求模块
const api = require('../../utils/util.js');
const util = require('../../utils/util.js');

Page({
  data: {
    currentDate: '',        // 当前日期
    currentWeek: '',        // 当前星期
    todayPoints: 0,         // 今日积分
    isCheckedToday: false,  // 今日是否已签到
    checkinPoints: 5,       // 签到获得积分
    taskList: [],           // 任务列表
    completedCount: 0,      // 已完成任务数
    totalTasks: 0,          // 总任务数
    isLoading: true         // 加载状态
  },

  onLoad: function() {
    // 初始化页面数据
    this.initPage();
  },

  onShow: function() {
    // 页面显示时刷新数据
    this.loadPageData();
  },

  // 初始化页面
  initPage: function() {
    // 设置当前日期和星期
    const date = new Date();
    this.setData({
      currentDate: util.formatDate(date, 'yyyy-MM-dd'),
      currentWeek: util.getWeekDay(date)
    });
  },

  // 加载页面数据
  loadPageData: function() {
    this.setData({ isLoading: true });
    
    // 并行请求签到状态和任务列表
    Promise.all([
      this.getCheckinStatus(),
      this.getDailyTasks()
    ]).then(() => {
      this.setData({ isLoading: false });
    }).catch(err => {
      console.error('加载数据失败:', err);
      this.setData({ isLoading: false });
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      });
    });
  },

  // 获取签到状态
  getCheckinStatus: function() {
    return new Promise((resolve, reject) => {
      api.getCheckinStatus().then(res => {
        if (res.success) {
          this.setData({
            isCheckedToday: res.data.checked,
            todayPoints: res.data.todayPoints || 0
          });
          resolve();
        } else {
          reject(res.message);
        }
      }).catch(reject);
    });
  },

  // 获取每日任务
  getDailyTasks: function() {
    return new Promise((resolve, reject) => {
      api.getDailyTasks().then(res => {
        if (res.success) {
          const taskList = res.data || [];
          const completedCount = taskList.filter(task => task.completed).length;
          
          this.setData({
            taskList: taskList,
            completedCount: completedCount,
            totalTasks: taskList.length
          });
          resolve();
        } else {
          reject(res.message);
        }
      }).catch(reject);
    });
  },

  // 处理签到
  handleCheckIn: function() {
    if (this.data.isCheckedToday) {
      return;
    }
    
    wx.showLoading({
      title: '签到中...',
      mask: true
    });
    
    api.checkin().then(res => {
      wx.hideLoading();
      
      if (res.success) {
        // 更新签到状态和积分
        this.setData({
          isCheckedToday: true,
          todayPoints: this.data.todayPoints + this.data.checkinPoints
        });
        
        // 显示签到成功动画
        this.showCheckinAnimation();
        
        wx.showToast({
          title: `签到成功 +${this.data.checkinPoints}积分`,
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.message || '签到失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('签到失败:', err);
      wx.showToast({
        title: '签到失败',
        icon: 'none'
      });
    });
  },

  // 显示签到成功动画
  showCheckinAnimation: function() {
    // 这里可以添加一些签到成功的动画效果
    // 例如使用小程序动画API创建粒子效果或放大动画
  },

  // 完成任务
  completeTask: function(e) {
    const taskId = e.currentTarget.dataset.taskId;
    const task = this.data.taskList.find(item => item.id === taskId);
    
    if (!task || task.completed) {
      return;
    }
    
    wx.showLoading({
      title: '提交中...',
      mask: true
    });
    
    api.completeTask(taskId).then(res => {
      wx.hideLoading();
      
      if (res.success) {
        // 更新任务状态和积分
        const updatedTasks = this.data.taskList.map(item => {
          if (item.id === taskId) {
            return { ...item, completed: true };
          }
          return item;
        });
        
        const completedCount = updatedTasks.filter(task => task.completed).length;
        
        this.setData({
          taskList: updatedTasks,
          completedCount: completedCount,
          todayPoints: this.data.todayPoints + task.points
        });
        
        // 显示完成动画
        this.showTaskCompleteAnimation(e.currentTarget);
        
        wx.showToast({
          title: `完成任务 +${task.points}积分`,
          icon: 'success'
        });
        
        // 检查是否有成就解锁
        this.checkAchievements();
      } else {
        wx.showToast({
          title: res.message || '操作失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('完成任务失败:', err);
      wx.showToast({
        title: '操作失败',
        icon: 'none'
      });
    });
  },

  // 显示任务完成动画
  showTaskCompleteAnimation: function(target) {
    // 创建动画
    const animation = wx.createAnimation({
      duration: 300,
      timingFunction: 'ease'
    });
    
    animation.opacity(0.7).scale(0.95).step();
    animation.opacity(1).scale(1).step();
    
    // 将动画数据导出给目标组件
    target.animation = animation;
    
    // 执行动画
    setTimeout(() => {
      target.animation = animation.export();
    }, 50);
  },

  // 检查成就
  checkAchievements: function() {
    api.checkAchievements().then(res => {
      if (res.success && res.data && res.data.length > 0) {
        // 如果有新成就解锁，显示提示
        res.data.forEach(achievement => {
          setTimeout(() => {
            wx.showModal({
              title: '成就解锁',
              content: `恭喜您解锁成就: ${achievement.name}`,
              showCancel: false
            });
          }, 500);
        });
      }
    }).catch(err => {
      console.error('检查成就失败:', err);
    });
  },

  // 下拉刷新
  onPullDownRefresh: function() {
    this.loadPageData().then(() => {
      wx.stopPullDownRefresh();
    }).catch(() => {
      wx.stopPullDownRefresh();
    });
  }
});